'use strict'

class image {

  constructor () {
    //param默认就是/:id，若要改变路由，则可以设置此属性，比如此处应设置为/:name
    this.param = '/:name'
  }

  //以下方法，若不需要，要去掉，避免无意义的路由。

  //获取资源具体内容
  async get (c) {
    //请求上下文c(一个封装了各种请求数据的对象),c的helper模块里有很多函数，其中有一个pipe函数
    //c.reply是响应对象，可写的流，
    //在http/1.1协议里指向response；在http/2协议里指向stream
    let imgname=c.param.name;
    await c.helper.pipe(`${c.service.imagePath}/${imgname}`,c.reply);
  }

  //创建资源
  async post (c) {
    let f=c.getFile('image')  //获取上传的文件信息，其实就是读取c.files的值    c.files-->上传文件保存的信息
    //image这个参数对应的是小程序editor.js中的uploadFile中的name值

    if(!f){
        return c.status(400).send('image not found');
    }

    //根据传入的原始文件名生成唯一文件名,主要使用f.filename的扩展名,默认为时间字符串+随机数：2021-01-01_12-12-23_27789.jpg
    let fname=c.helper.makeName(f.filename);

    //移动文件到指定位置
    await c.moveFile(f,`${c.service.imagePath}/${fname}`);

    c.send(fname);
  }

  __mid(){
    return [
      {
        name:'token-verify',
        path:['post']
      }
    ]
  }

}

module.exports = image
